#include"BlockQueue.hpp"
#include"Task.hpp"
#include<sys/types.h>
#include<unistd.h>
#include<ctime>
using namespace std;
int myadd(int x,int y)
{
    return x+y;
}
void *consumer(void* bq_)
{
    BlockQueue<Task> *bq=static_cast<BlockQueue<Task> *>(bq_);
    while(true)
    {
        //消费活动
        Task t;
        bq->pop(&t);
        std::cout<<"消费数据："<<t()<<std::endl;

    }
    return nullptr;
}
void *producter(void* bq_)
{
    BlockQueue<Task> *bq=static_cast<BlockQueue<Task> *>(bq_);
    while(true)
    {
        //生产活动
        int x=rand()%10+1;//在这里我们先用随机数构建一个数据
        int y=rand()%5+1;
        Task t(x,y,myadd);
        bq->push(t);
        //std::cout<<"生产数据:"<<std::endl;
    }
    return nullptr;

}




int main()
{
    srand((unsigned long)time(nullptr) ^ getpid());
    BlockQueue<Task> *bq=new BlockQueue<Task>();//两个进程看到同一份资源
    pthread_t c,p;
    pthread_create(&c,nullptr,consumer,bq);
    pthread_create(&p,nullptr,producter,bq);

    pthread_join(c,nullptr);
    pthread_join(p,nullptr);
    return 0;
}